From ca725736ca1884a56b7ec3096caefaf537b5565c Mon Sep 17 00:00:00 2001 From: robertl Date: Mon, 27 Nov 2006 20:22:41 +0000 Subject: [PATCH] GPX: Fix a problem made more obvious by GZIP reader involving reads slightly larger than our block size. Util: eliminate use of va_copy. --- gpx.c | 4 ++++ util.c | 24 +++++------------------- 2 files changed, 9 insertions(+), 19 deletions(-) diff --git a/gpx.c b/gpx.c index 6551d01df..12650afef 100644 --- a/gpx.c +++ b/gpx.c @@ -1227,7 +1227,11 @@ gpx_read(void) int maxentlength = 8; len = gbfread(buf, 1, MY_CBUF_SZ - maxentlength, fd); done = gbfeof(fd) || !len; +// fprintf(stderr, "%d/%d\n", len, done); buf[len] = '\0'; + if (len < maxentlength) { + maxentlength = len; + } badchar = buf+len-maxentlength; badchar = strchr( badchar, '&' ); extra = maxentlength - 1; /* for terminator */ diff --git a/util.c b/util.c index 9259e5ea6..2dc7ed9b9 100644 --- a/util.c +++ b/util.c @@ -291,7 +291,7 @@ xfputs(const char *errtxt, const char *s, FILE *stream) */ int -xvasprintf(char **strp, const char *fmt, va_list args) +xasprintf(char **strp, const char *fmt, ...) { /* From http://perfec.to/vsnprintf/pasprintf.c */ /* size of first buffer malloc; start small to exercise grow routines */ @@ -301,7 +301,7 @@ xvasprintf(char **strp, const char *fmt, va_list args) char *newbuf; size_t nextsize = 0; int outsize; - va_list tmp; + va_list args; bufsize = 0; for (;;) { @@ -320,9 +320,9 @@ xvasprintf(char **strp, const char *fmt, va_list args) return -1; } - va_copy(tmp, args); - outsize = vsnprintf(buf, bufsize, fmt, tmp); - va_end(tmp); + va_start(args, fmt); + outsize = vsnprintf(buf, bufsize, fmt, args); + va_end(args); if (outsize == -1) { /* Clear indication that output was truncated, but no @@ -364,20 +364,6 @@ xvasprintf(char **strp, const char *fmt, va_list args) return 0; } -int -xasprintf(char **strp, const char *fmt, ...) -{ - va_list args; - int rval; - - va_start(args, fmt); - rval = xvasprintf(strp, fmt, args); - va_end(args); - - return rval; - -} - /* * Duplicate a pascal string into a normal C string. */ -- 2.30.2